from component.c_log import LOG
from component.c_mysql import MySQLDB
from component.c_config import app_config

TAG = "s_sport_record"

class SportRecordServer:
    def __init__(self,queue,submit_event):
        LOG(TAG,"初始化数据库连接")
        self.queue = queue
        self.submit_event = submit_event
        # 数据库配置
        db_config = db_config = app_config.db_connection_params
        # 初始化数据库连接
        self.db = MySQLDB(**db_config)
        LOG(TAG,"数据库连接初始化完成")

        # 创建表，若表存在则不会创建
        self.__create_table()
    
    def __create_table(self):
        LOG(TAG,"检查数据库表 sport_record 是否创建")
        if not self.db.table_exists("sport_record"):
            LOG(TAG,"数据表 sport_record 未创建")
            # 创建happy_record表
            create_table_sql = """
            CREATE TABLE IF NOT EXISTS `sport_record` (
                `id` INT AUTO_INCREMENT PRIMARY KEY,
                `sport` VARCHAR(32) NOT NULL COMMENT '运动类型',
                `location` VARCHAR(32) NOT NULL COMMENT '运动地点',
                `place` VARCHAR(32) NOT NULL COMMENT '运动场地',
                `date` DATE NOT NULL COMMENT '运动日期',
                `distance` DECIMAL(5,2) DEFAULT NULL COMMENT '路程(公里)',
                `duration` TIME NOT NULL COMMENT '运动时长',
                `calories` INT NOT NULL COMMENT '消耗热量',
                `avg_pace` DECIMAL(4,2) DEFAULT NULL COMMENT '平均配速(min/km)',
                `avg_speed` DECIMAL(4,2) DEFAULT NULL COMMENT '平均速度(km/h)'
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
            """
            self.db.execute_query(create_table_sql)
            LOG(TAG,"数据表 sport_record 创建成功")
        else:
            LOG(TAG,"数据表 sport_record 已创建")

    def add_data(self,data):
        '''
        data:字典格式。内容如下
        data = {
            'date': '2025-03-08', # 日期
            'duration': '00:17:16', # 运动时长
            'calories': 176, # 消耗热量
            'distance': 1.93, # 路程(公里)
            'avg_speed': 8.57, # 平均速度(km/h)
            'avg_pace': 6.71 # 平均配速(min/km)
        }
        '''
        
        # 插入数据
        LOG(TAG,f"插入数据 {data}")
        if self.db.insert("sport_record",data) is None:
            LOG(TAG,"插入数据失败")
            return
        else:
            LOG(TAG,"插入数据完成")
            return
    
    def run(self):
        LOG(TAG,"启动Sport记录服务")
        while True:
            if self.submit_event.is_set():
                data = self.queue.get()
                self.add_data(data)
                self.submit_event.clear()
                LOG(TAG,"SportRecordServer","提交成功")
            else:
                LOG(TAG,"SportRecordServer","等待提交")
                self.submit_event.wait()

